#include <stdlib.h>
#include <stdio.h>



//存放多项式某项的结点结构
struct node
{
    int exp ;  // 表示指数
    int coef ; //表示系数
    struct node *next;  //指向下一个结点的指针
};
typedef  struct node * PNODE ;

/*
  函数功能：生成多项式
  函数名：createPoly
  函数参数：无
  返回值：指向多项式的头指针
*/
PNODE createPoly(void)
{
    //在此处填写代码，能实现创建一个多项式并返回多项式头指针的函数
    //注意：头指针不存放多项式的项。
    /**********  Begin **********/
    PNODE h,l,p;
    int a,i;
    h=(PNODE)malloc(sizeof(PNODE));
    l=h;
    scanf("%d %d", &a, &i);
    while(a != 0)
    {
        p=(PNODE)malloc(sizeof(PNODE));
        p->coef=a;
        p->exp=i;
        l->next=p;
        l=p;
        scanf("%d %d", &a, &i);
    }
    l->next=NULL;
    return(h);
    /**********  End  **********/
}

/*
   函数功能：进行多项式相加
   函数名：addPoly
   函数参数：polyAddLeft ：加法左边多项式头指针, polyAddRight：加法右边多项式头指针
   返回值：指向结果多项式的头指针
*/
PNODE addPoly(PNODE polyAddLeft , PNODE polyAddRight)
{
    //在此处填写代码，能实现创两个多项式相加并返回结果多项式头指针的函数
    /**********  Begin **********/
    PNODE head,p,q,tail,l;
    int sum;
    head=(PNODE)malloc(sizeof(PNODE));
    p=polyAddLeft->next;
    q=polyAddRight->next;
    tail=head;
    while(p!=NULL&&q!=NULL)
    {
        l=(PNODE)malloc(sizeof(PNODE));
        if(p->exp<q->exp)
        {
            l->coef=p->coef;
            l->exp=p->exp;
            tail->next=l;
            tail=l;
            p=p->next;
        }
        else if(p->exp==q->exp)
        {
            sum=p->coef+q->coef;
            if(sum!=0)
            {
                l->coef=sum;
                l->exp=p->exp;
                tail->next=l;
                tail=l;
                p=p->next;
                q=q->next;
            }
            else
            {
                p=p->next;
                q=q->next;
            }
        }
        else
        {

            l->coef=q->coef;
            l->exp=q->exp;
            tail->next=l;
            tail=l;
            q=q->next;
        }
    }
    if(p!=NULL)
        tail->next=p;
    else
        tail->next=q;
    return(head);
    /**********  End **********/
}

/*
   函数功能：输出多项式
   函数名：printPoly
   函数参数：待输出多项式的头指针poly
   返回值：无
*/
void printPoly(PNODE poly)
{
    //在此处填写代码，能实现按格式输出多项式的功能，输出格式样例见说明
    /**********  Begin **********/
    PNODE p;
    int a,i;
    p=poly->next;
    while(p->next!=NULL)
    {
        a=p->coef;
        i=p->exp;
        printf("%dx^%d+", a, i);
        p=p->next;
    }
    a=p->coef;
    i=p->exp;
    printf("%dx^%d", a, i);
    /**********  End **********/
}
void destroyPoly(PNODE poly)
{
//释放存储多项式的链表空间
    PNODE p=poly->next;
    while(p!=NULL)
    {
        free(poly);
        poly=p;
        p=p->next;
    }
    free(p);
}
//记得抄完改几个


